/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BarCode;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 *
 * @author Juan
 */
public class Imprimiblex4 extends JPanel implements Printable {
    
    public Imprimiblex4() {}

public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

if(page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}


Graphics2D g2d = (Graphics2D)g;

g2d.translate(pf.getImageableX(), pf.getImageableY());


GenerateBarcode codigo= new GenerateBarcode();
//codigo.generarCodigo(TFBusqueda.getText());
try{
    int numeroCodigos=arregloCodigos.length;
    for(int i=0 ; i < numeroCodigos;i++){
        try {
            codigo.generarCodigo(arregloCodigos[i])  ;
        } catch (Exception ex) {
            Logger.getLogger(Imprimiblex4.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    // aca se imprime hoja si hay menos de 3 codigos en el arreglo ingresado
    if(numeroCodigos<4){
        Image imagen=null;
         for(int i=0 ; i < numeroCodigos%4;i++){
         File a = new File(System.getProperty("user.dir") + System.getProperty("file.separator")+"src"+System.getProperty("file.separator")+"CodigosGenerados"+System.getProperty("file.separator")+arregloCodigos[i]+".png");
       ImageIcon imageIcon=null;
       if(a.exists()){ 
            imageIcon = new ImageIcon(a.getPath());
        }else {
            JOptionPane.showMessageDialog(null, "Error en la ruta del archivo a imprimir");
        }
   
        imagen = imageIcon.getImage();
        if(imagen == null){
            System.out.print("no hay imagen");
        }
        if(i%4==0){
        g.drawImage(imagen,100,300,this);
        if(numeroCodigos%4==0)
            return PAGE_EXISTS;
       }
       if(i%4==1){
        g.drawImage(imagen,300,300,this);
        if(numeroCodigos%4==1)
            return PAGE_EXISTS;
       }
       if(i%4==2){
        g.drawImage(imagen,100,500,this);
                if(numeroCodigos%4==2)
            return PAGE_EXISTS;
       }
       if(i%4==3){
        g.drawImage(imagen,300,500,this);
        if(numeroCodigos%4==3)
            return PAGE_EXISTS;
       }
         }
    
    }
    //se imprimen los codigos si hay mas de 4 codigos en el arreglo ingresado
    if(numeroCodigos>=4){
        Image imagen=null;
        // desde el primer codigo hasta el ultimo multiplo de 4 se imprime cada 4 codigos
        for(int i= 0 ; i < 4*((int)(numeroCodigos/4));i++){
         File a = new File(System.getProperty("user.dir") + System.getProperty("file.separator")+"src"+System.getProperty("file.separator")+"CodigosGenerados"+System.getProperty("file.separator")+arregloCodigos[i]+".png");
       ImageIcon imageIcon=null;
       if(a.exists()){ 
            imageIcon = new ImageIcon(a.getPath());
        }else {
            JOptionPane.showMessageDialog(null, "Error en la ruta del archivo a imprimir");
        }
   
        imagen = imageIcon.getImage();
        if(imagen == null){
            System.out.print("no hay imagen");
        }
        if(i%4==0){
        g.drawImage(imagen,100,300,this);
       }
       if(i%4==1){
        g.drawImage(imagen,300,300,this);
       }
       if(i%4==2){
        g.drawImage(imagen,100,500,this);
       }
       if(i%4==3){
        g.drawImage(imagen,300,500,this);
        return PAGE_EXISTS;
       }
         }
        
        //se imprimen los codigos restantes de haber %4 diferente de 0 y ser > a 4
        for(int i=4*((int)(numeroCodigos/4)) ; i < numeroCodigos;i++){
        
         File a = new File(System.getProperty("user.dir") + System.getProperty("file.separator")+"src"+System.getProperty("file.separator")+"CodigosGenerados"+System.getProperty("file.separator")+arregloCodigos[i]+".png");
       ImageIcon imageIcon=null;
       if(a.exists()){ 
            imageIcon = new ImageIcon(a.getPath());
        }else {
            JOptionPane.showMessageDialog(null, "Error en la ruta del archivo a imprimir");
        }
   
        imagen = imageIcon.getImage();
        if(imagen == null){
            System.out.print("no hay imagen");
        }
        if(i%4==0){
        g.drawImage(imagen,100,300,this);
        if(numeroCodigos%4==0)
            return PAGE_EXISTS;
       }
       if(i%4==1){
        g.drawImage(imagen,300,300,this);
        if(numeroCodigos%4==1)
            return PAGE_EXISTS;
       }
       if(i%4==2){
        g.drawImage(imagen,100,500,this);
                if(numeroCodigos%4==2)
            return PAGE_EXISTS;
       }
       if(i%4==3){
        g.drawImage(imagen,300,500,this);
        if(numeroCodigos%4==3)
            return PAGE_EXISTS;
       }
         }
         }
    
    
   
/*
    File a = new File(direccion);
    ImageIcon imageIcon=null;
    
        if(a.exists()){ 
            imageIcon = new ImageIcon(a.getPath());
        }else {
            JOptionPane.showMessageDialog(null, "Error en la ruta del archivo a imprimir");
        }
   
        imagen = imageIcon.getImage();
   // "C://Users//Juan//Documents//NetBeansProjects//Alpha1//taller-de-proyectos-sistematizacion//ProyectoAlpha1//src//CodigosGenerados//Abc12345.png"
        
        if(imagen == null){
            System.out.print("no hay imagen");
        }
        
  //posicionamiento de la imagen
        g.drawImage(imagen,300,300,this);
         */

}catch(NullPointerException e){
    e.printStackTrace();
    JOptionPane.showMessageDialog(this, e);
}


return PAGE_EXISTS;

}

public String direccion;
public String[] arregloCodigos={"ABC12345","ABC11111","ABC22222","ABC33333","ABC44444"}; // es necesario hacer que 

public void imprimir(String[] codigos) {
    this.arregloCodigos=codigos;
    PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);

boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
}


}